import { AdditDmgAttr, AdditDmgEffType, AdditDmgEffTypeKey, AdditDmgEffectConfig } from "../../config/AdditDmgEffectConfig";
import { DmgTypeKey, UnitAttrStruct } from "../../types/L_Type";
import UnitX from "../../entity/UnitX";
import L_Run from "../../utils/L_Run";
import AdditDmgBase from "./AdditDmgBase";
import PyFireballEff from "./PyFireballEff";
import PyLightningChainEff from "./PyLightningChainEff";
import L_String from "../../utils/L_String";
import DmgFormula from "../dmgabout/DmgFormula";

/** 附加攻击特效的计算 
 *  注意：通常使用DmgExecutor.ts 入口被调用  不需要直接调用此接口
*/
export default class AdditDamageSts{
 
    public static TrgAndExecAdditDamage(aux:UnitX,bux:UnitX,abilityTrg:boolean,additTrgProb:number){
        //先判断第一次触发系数  一般是技能自身的行为触发系数（例如AOE技能 通常会调低触发系数 防止一片一片的触发）
        // if(L_Run.RandomInt_L(0,100)>=additTrgProb){
        //     return
        // }
        //暂时使用技能触发系数*特效触发系数来计算  让技能触发系数200%变得有意义

        //单位没有任何附加攻击特效  直接跳出
        let additDmgEffArr:Array<AdditDmgEffTypeKey> | undefined=aux.additDmgEffs
        
        if(additDmgEffArr==undefined) return

        for(let i=0;i<additDmgEffArr.length;i++){
            let k:AdditDmgEffTypeKey=additDmgEffArr[i]
            let adet:AdditDmgAttr=AdditDmgEffectConfig[k]
            //触发几率
            let rv:number=L_Run.RandomInt_L(0,100)
           // console.log('[',adet.name,']攻击特效触发几率:',(adet.trgProb*additTrgProb/100))
           //  console.log("<!!!>",adet.name,"特效触发几率:",adet.trgProb,"%  ,当前骰子值:",rv)
            if(rv>(adet.trgProb*additTrgProb/100)){
                continue;
            }

            //伤害类型和拥有触发条件不满足的情况判定
            if(!((abilityTrg && adet.abilityTrg) || (abilityTrg==false && adet.ordChoppingTrg))){
                //不满足 平砍限定触发  或者技能限定触发任意一种 提前结束
                continue;
            }
            //计算基础伤害
           // let dmgf=adet.baseDmg+(aux.attrs?.atk || 0)*adet.physicDmgMul+(aux.attrs?.int || 0)*adet.migicDmgMul
            let dmgf=DmgFormula.getBaseDmgStsAttrVal(aux,adet.baseDmg,adet.physicDmgMul,adet.migicDmgMul)
            //config配置特效的实现类
            let impObj=new adet.impClass()
            impObj.execEffect(aux,bux,dmgf,adet.dmgType,adet.extraDmgAttr,adet.exclusiveAttr)
            // switch(k){
            //     case "phyFireball":
            //         PyFireballEff.getInstance().execEffect(aux,bux,dmgf,adet.dmgType,adet.extraDmgAttr,adet.exclusiveAttr)
            //         break
            //     case "pyhLightningChain":
            //         PyLightningChainEff.getInstance().execEffect(aux,bux,dmgf,adet.dmgType,adet.extraDmgAttr,adet.exclusiveAttr)
            //         break
            //     default:

            //        break
            // }
        }
    }

  
}  